//////////////////////elaborado por: Susana Taquichiri////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.Contracts;
using Boa.AIT.AccesoDatos.Entidades;
using Boa.AIT.AccesoDatos.Contratos;

namespace Boa.AIT.AccesoDatos.Contexto
{
   public class AIT_EquipoITAccesoDatos : DataAccessBase<AIT_EquipoIT>, IAIT_EquipoITAccesoDatos
   {
     public AIT_EquipoITAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<AIT_EquipoIT> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<AIT_EquipoIT> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(AIT_EquipoIT));
             criteria.Add(Expression.Like("Descripcion", "%" + filtro + "%")); 
             return criteria.List<AIT_EquipoIT>();
     }


     public IList<AIT_EquipoIT> GetEquiposNoAsignados()
     {
         var sql = @"select * from ait_equipoit e
                    where e.equipoId not in (select aea.EquipoId from dbo.AIT_AsignarEquipoAlmacen aea)";

         var query = Session.CreateSQLQuery(sql).AddEntity(typeof(AIT_EquipoIT));
         return query.List<AIT_EquipoIT>();
     }


     public IList<AIT_EquipoIT> GetEquiposDeLote(int LoteId)
     {
         var hql = "from AIT_EquipoIT e where e.Lote.Id = :LoteId";
         var query = Session.CreateQuery(hql);
         query.SetInt32("LoteId", LoteId);
         return query.List<AIT_EquipoIT>();
     }


     public IList<AIT_EquipoIT> GetAccesoriosLibres()
     {
         var sql = "select * from AIT_EquipoIT where EsAccesorio = 1 and EquipoId not in (select edi.EquipoId from AIT_EquipoDisponibleItem edi)";
         var query = Session.CreateSQLQuery(sql).AddEntity(typeof(AIT_EquipoIT));
         return query.List<AIT_EquipoIT>();
     }

     public IList<AIT_EquipoIT> GetEquiposLibres()
     {
         var sql = "select * from AIT_EquipoIT where EsAccesorio = 0 and EquipoId not in (select edi.EquipoId from AIT_EquipoDisponibleItem edi)";
         var query = Session.CreateSQLQuery(sql).AddEntity(typeof(AIT_EquipoIT));
         return query.List<AIT_EquipoIT>();
     }


     public IList<AIT_EquipoIT> GetPorGuid(string ListaGuids, char separador = ',')
     {
         var hql = "from AIT_EquipoIT where Guid  in (:Guids)";
         var query = Session.CreateQuery(hql);
         query.SetParameterList("Guids", ListaGuids.TrimEnd(separador).TrimStart(separador).Split(separador).ToList());
         return query.List<AIT_EquipoIT>();
     }

     public IList<AIT_EquipoIT> ListarEquiposDeEquipoDisponible(int EquipoDisponibleId)
     {
         var hql = "select edi.Equipo from AIT_EquipoDisponibleItem edi where edi.EquipoDisponible.Id = :EquipoDisponibleId ";
         var query = Session.CreateQuery(hql);
         query.SetInt32("EquipoDisponibleId", EquipoDisponibleId);
         return query.List<AIT_EquipoIT>();
     }
     
   }
}

